`
https://leetcode.cn/problems/minimum-time-to-complete-trips/
`

/**
 * @param {number[]} time
 * @param {number} totalTrips
 * @return {number}
 */
var minimumTime = function (time, totalTrips) {
  const minTime = Math.min(...time)
  // 找到两个循环不变量
  // 跑得最快的一趟车都无法完成一趟旅途
  let left = minTime - 1
  // 让跑的最快的车跑完 totalTrips 趟，一定能跑完
  let right = minTime * totalTrips
  // 找到第一个 >= totalTrips 的 t
  while (left + 1 < right) {
    const mid = left + Math.floor((right - left) / 2)
    // 计算 mid 时刻能完成的旅途数量
    let sum = 0
    for (const t of time) {
      sum += Math.floor(mid / t)
    }
    if (sum < totalTrips) {
      left = mid
    } else {
      right = mid
    }
  }
  return right
};